package util;

import java.io.IOException;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 * Classe util para atividades comuns do JSF 2.0
 * 
 * @author Maciel Melo
 * @project SANIS
 * @since 27/10/2013
 */
public class FacesUtils {

	private FacesUtils() {
	}

	/**
	 * Mens info.
	 *
	 * @param msg the msg
	 */
	public static void mensInfo(String msg) {
		mensInfo(null, msg);
	}

	/**
	 * Mens info.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensInfo(String id, String msg) {
		message(id, msg, FacesMessage.SEVERITY_INFO, "Informação");
	}

	/**
	 * Mens info.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensInfo(String id, List<String> msg) {
		StringBuffer erro = new StringBuffer();
		for (String mensagem : msg) {
			erro.append(mensagem).append("\n");
		}
		message(id, erro.toString(), FacesMessage.SEVERITY_INFO, "Informação");
	}

	// ERRO

	/**
	 * Mens erro.
	 *
	 * @param msg the msg
	 */
	public static void mensErro(String msg) {
		mensErro(null, msg);
	}

	/**
	 * Mens erro.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensErro(String id, String msg) {
		message(id, msg, FacesMessage.SEVERITY_ERROR, "Erro");
	}

	/**
	 * Mens erro.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensErro(String id, List<String> msg) {
		StringBuffer erro = new StringBuffer();
		for (String mensagem : msg) {
			erro.append(mensagem).append("\n");
		}
		message(id, erro.toString(), FacesMessage.SEVERITY_ERROR, "Erro");
	}

	// WARN

	/**
	 * Mens warn.
	 *
	 * @param msg the msg
	 */
	public static void mensWarn(String msg) {
		mensWarn(null, msg);
	}

	/**
	 * Mens warn.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensWarn(String id, String msg) {
		message(id, msg, FacesMessage.SEVERITY_WARN, "Aviso");
	}

	/**
	 * Mens warn.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensWarn(String id, List<String> msg) {
		StringBuffer erro = new StringBuffer();
		for (String mensagem : msg) {
			erro.append(mensagem).append("\n");
		}
		message(id, erro.toString(), FacesMessage.SEVERITY_WARN, "Aviso");
	}

	// FATAL

	/**
	 * Mens fatal.
	 *
	 * @param msg the msg
	 */
	public static void mensFatal(String msg) {
		mensFatal(null, msg);
	}

	/**
	 * Mens fatal.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensFatal(String id, String msg) {
		message(id, msg, FacesMessage.SEVERITY_FATAL, "ERRO");
	}

	/**
	 * Mens fatal.
	 *
	 * @param id the id
	 * @param msg the msg
	 */
	public static void mensFatal(String id, List<String> msg) {
		StringBuffer erro = new StringBuffer();
		for (String mensagem : msg) {
			erro.append(mensagem).append("\n");
		}
		message(id, erro.toString(), FacesMessage.SEVERITY_FATAL, "ERRO");
	}

	//

	private static void message(String id, String msg,
			FacesMessage.Severity severity, String titleMsg) {
		FacesContext.getCurrentInstance().addMessage(id,
				new FacesMessage(severity, titleMsg, msg));
	}

	// Redirecionar
	/**
	 * Redirecinar.
	 *
	 * @param paginaNome the pagina nome
	 * @throws IOException Signals that an I/O exception has occurred.
	 */
	public static void redirecinar(String paginaNome) throws IOException {
		FacesContext.getCurrentInstance().getExternalContext()
				.redirect("" + paginaNome);
	}

}